package leetcode.editor.cn;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

/**
 * 题目Id：LCR 004
 * 题目：只出现一次的数字 II
 * 日期：2024-03-07 17:54:33
 */
//给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [2,2,3,2]
//输出：3
// 
//
// 示例 2： 
//
// 
//输入：nums = [0,1,0,1,0,1,100]
//输出：100
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 3 * 10⁴ 
// -2³¹ <= nums[i] <= 2³¹ - 1 
// nums 中，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 
// 
//
// 
//
// 进阶：你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？ 
//
// 
//
// 
// 注意：本题与主站 137 题相同：https://leetcode-cn.com/problems/single-number-ii/ 
//
// Related Topics 位运算 数组 👍 151 👎 0


public class WGki4K {
    public static void main(String[] args) {
        Solution solution = new WGki4K().new Solution();
        final int i = solution.singleNumber(new int[]{4,1,2,1,2});
        System.out.println(i);

        System.out.println("Hello world");
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int singleNumber(int[] nums) {
            final HashMap<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {

                map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
            }
            final Set<Integer> integers = map.keySet();
            for (Integer integer : integers) {
                if (map.get(integer) == 1) {
                    return integer;
                }
            }
            return -1;

        }
    }
//leetcode submit region end(Prohibit modification and deletion)

} 
